public class Test {


    public static void main(String[] args) {
        Dog d = new Dog();
        d.name = "坦克";


    }





}


class Animal {
    public String name;
    public int age;

    public void eat() {
        System.out.println("eat");
    }

    public void play() {
        System.out.println("play");
    }

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("两参构造");
    }
}

//在继承关系上，当我们在构造子类的时候，
//一定要先帮助父类进行构造？？---》怎么帮助，调用构造方法
//super在子类方法内调用弗雷雷构造方法，必须放在第一行
//super和this在调用构造方法时，不能够同时出现


class Dog extends Animal {

    public void bark() {
        System.out.println("wang");
    }

    public Dog(String name, int age) {
//        super.name = name;
//        super.age = age;
       super(name, age);
    }
}

class Cat extends Animal {

    int size;
    public void mew() {
        System.out.println("miao");
    }

    public void eat(int a) {
        System.out.println("和animal的eat（）构成重载");
    }

    public Cat(String name, int age, int size) {
        super(name, age);
        this.size = size;
    }
}

//子类访问父类成员
//不存在同名变量--->直接访问，子类有，就拿子类的，子类没有，就拿父类的，
//子类和父类存在同名变量---》优先访问子类的变量（就近原则）
//子类父类存在同名变量，想要访问父类的则使用 super.变量名 （super 超--》超类，父类）
//this  当前对象引用  父类对象引用
//方法的调用和变量的调用相同

//通过super.data 在子类中访问父类成员的变量
//super.func() 在子类当中访问1父类的成员方法
//super是父类的引用，错误的 因为super只是一个关键字，最大的作用就是
// 在写代码或读代码的时候由更大的可读性
//super只能在非静态方法使用
//super只能指代直接的父类，不能深层指代
//不在同一个类当中也可以重载，如果是在继承关系上，此时也可以发生重载



//
//private 修饰的成员变量或者成员方法等，只能在同一个类，类外不可以使 用·
//不写默认  同一个包中使用
//public 公开的，哪里都能用
//protected  受保护的，同一个包随便用，不同包必须是继承关系才能用



//final 修饰类  表示密封类，不能被继承
//修饰成员变量  一定要初始化
//修饰局部变量  表示常量
